﻿/*
 * @file:ble_ftms.h
 *
 * @date: 2019-8-14
 * @author: l00357454
 */

#include "ble_ftms.h"
// #include "fitness_machine_uuids.h"
#include "ftmp_uart.h"
#include "data_split_group.h"

void SendUartDataToApp(hw_u8 *data, hw_u8 length, hw_u8 uuidIndex);						// 发送到APP的函数
void SendAppMachineControlPointToUart(hw_u8 opCode, control_point_target_union *param); // 发送控制命令到串口的函数
void SendAppExtensionDataToUart(huawei_fitness_extension_data_t *extensionData);		// 发送扩展字段到串口的函数

/**
 * 厂家自实现函数，此函数发送APP控制数据到到串口
 *
 * 函数名不可更改，可放到自己的对应文件
 * opCode 见fitness_machine_control_point_operation_code枚举
 * param使用前需做非空校验
 *
 */
void SendAppMachineControlPointToUart(hw_u8 opCode, control_point_target_union *param)
{
	// 	执行结束，需要  响应状态  成功 or 失败
	param->response_state = operation_failed; //success;
	switch (opCode)
	{
	case set_target_speed:
		// param->targetSpeed; //目标速度
		// param->response_state = success;
		break;
	case set_target_inclination:
		// param->targetInclination; //目标倾向
		//  param->response_state = success;
		break;
	case start://启动 或者恢复运动
		// TrainingStatusAccessWrite(quick_start);
		// FitnessMachineStatusnotify(start_by_user, NULL);
		param->response_state = success;
		break;
	case stop:
		if (0x01 == param->Stop_or_pause_param) // 停止
		{
			// TrainingStatusAccessWrite(idle);
			// FitnessMachineStatusnotify(stop_by_user, NULL);
		}
		else if (0x02 == param->Stop_or_pause_param) //暂停
		{
			// FitnessMachineStatusnotify(pause_by_user, NULL);
		}
		param->response_state = success;
		break;
	}
	return;
}

/**
 * 厂家自实现函数，此函数接收扩展信息，用于实现 显示同步
 * 函数名不可更改，可放到自己的对应文件
 */
void SendAppExtensionDataToUart(huawei_fitness_extension_data_t *extensionData)
{
	hw_u8 flagBit = 0x01;
	for (int i = 0; i < 8; i++)
	{
		flagBit = 0x01 << i;
		if ((extensionData->flags & flagBit) == flagBit)
		{ // 遍历flag每一位
			switch (i)
			{
			case 0: // 未使用
				break;
			case 1: // 心率数据
				// printf("心率 %u", extensionData->heartRate);
				break;
			case 2: // 总能量
				// printf("总能量 %u", extensionData->totalEnergy);
				break;
			case 3: // 动态能量  未使用
				// printf("动态能量 %u", extensionData->dynamicEnerty);
				break;
			case 4: // 总步数
				// printf("总步数 %u", extensionData->steps);
				break;
			case 5: // 运行时间
				// printf("运行时间 %u", extensionData->remaining_time);
				break;
			case 6: // RGB 颜色码
				// printf("RGB 颜色码 %x %x %x", extensionData->RGBColorTable[0], extensionData->RGBColorTable[1], extensionData->RGBColorTable[2]);
				break;
			case 7: // 运动里程
				// printf("运动里程 %u", extensionData->totalDistance);
				break;
			default:
				break;
			}
		}
	}
	return;
}


/**
 * 厂商自己的回调函数，此处为示意。
 * 在蓝牙断开时回调的函数中调用ResetWhenBluetoothDisconnect接口。
 * 通知蓝牙模块清除标志位
 *
 */
void BluetoothDisconect()
{
	ResetWhenBluetoothDisconnect();
}
